package com.gt.wxpay.cashier.application;

import com.gt.wxpay.cashier.domain.Result;
import com.gt.wxpay.cashier.domain.dto.PayRespDto;
import com.gt.wxpay.cashier.domain.dto.QueryOrderDto;
import com.gt.wxpay.cashier.domain.model.CashierPayment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 业务系统远程过程调用接口
 */
public interface PaymentRemoteService {

    /**
     * 业务系统调用该接口创建支付订单，订单创建成功后方可进行后续支付操作
     * Http+POST
     * 请带上渠道信息
     *
     * @param cashierPayment CashierPayment
     * @return PayRespDto
     */
    @RequestMapping("/create")
    Result<PayRespDto> create(@RequestBody CashierPayment cashierPayment);


    /**
     * 业务系统调用该接口查询支付订单{查询本地--数据库|优先级低}
     *
     * @param paymentNo paymentNo 收银台唯一流水号
     * @return CashierPayment
     */
    @GetMapping("/queryPayInfo")
    Result<CashierPayment> queryByPamentNo(@RequestParam("paymentNo") String paymentNo);

    /**
     * 调用接口查询微信端--订单状态{查询微信--更新收银台和推送业务侧|优先级高}
     *
     * @param paymentNo paymentNo 收银台唯一流水号
     * @return PayRespDto
     */
    @GetMapping("/query")
    Result<QueryOrderDto> queryPayInfo(@RequestParam("paymentNo") String paymentNo);


    /**
     * 关闭微信订单
     *
     * @param paymentNo 收银台唯一流水号
     */
    @GetMapping("/close")
    Result<String> close(@RequestParam("paymentNo") String paymentNo);
}
